/**
 *
 * Praktikum CG WP WS13/14 Gruppe: Andreas Rebri(andreas.rebri@haw-hamburg.de)
 * Joschka Schulz(joschka.schulz@haw-hamburg.de) Aufgabe : Aufgabenblatt 3
 * Verwendete Quellen: -
 */
package edu.cg1.exercises.marchingcubes;

import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;

/**
 * Diese Klasse reprensentiert ein Dreieck, bestehend aus drei Knotenpunken.
 */
public class Triangle {

    /**
     * Die drei knotenpunkte des Dreiecks
     */
    private int vertex1, vertex2, vertex3;
    /**
     * Die Dreiecksnormale
     */
    private Vector3d normal = new Vector3d();

    public Triangle(int vertex1, int vertex2, int vertex3) {
        this.vertex1 = vertex1;
        this.vertex2 = vertex2;
        this.vertex3 = vertex3;
    }

    public int getVertex1() {
        return vertex1;
    }

    public int getVertex2() {
        return vertex2;
    }

    public int getVertex3() {
        return vertex3;
    }

    public Vector3d getNormal() {
        return normal;
    }

    /**
     * Berechnung und setzung der Normale durch (pB-pA) x (pC-pA)
     *
     * @param pA erster Knoten des Dreicks
     * @param pB zweiter Knoten des Dreicks
     * @param pC dritter Knoten des Dreicks
     */
    public void computeNormal(Point3d pA, Point3d pB, Point3d pC) {
        Vector3d vB = new Vector3d(pB);
        Vector3d vC = new Vector3d(pC);
        vB.sub(pA);
        vC.sub(pA);
        // Kreuzprodukt von Vektor B und Vektor C
        normal.cross(vB, vC);
        normal.normalize();
    }
}
